"""
腾讯云COS工具类
"""
import uuid
from datetime import datetime
from qcloud_cos import CosConfig, CosS3Client
from django.conf import settings


class COSUploader:
    """腾讯云COS上传工具"""
    
    def __init__(self):
        """初始化COS客户端"""
        config = settings.TENCENT_COS_CONFIG
        self.secret_id = config['SECRET_ID']
        self.secret_key = config['SECRET_KEY']
        self.region = config['REGION']
        self.bucket = config['BUCKET']
        self.domain = config['DOMAIN']
        
        # 初始化COS配置
        cos_config = CosConfig(
            Region=self.region,
            SecretId=self.secret_id,
            SecretKey=self.secret_key
        )
        self.client = CosS3Client(cos_config)
    
    def generate_file_path(self, filename, folder='zongce'):
        """
        生成唯一的文件路径
        
        Args:
            filename: 原始文件名
            folder: 存储文件夹（默认zongce）
            
        Returns:
            生成的文件路径，格式: folder/YYYYMMDD/uuid_filename
        """
        # 提取文件扩展名
        ext = filename.split('.')[-1] if '.' in filename else ''
        
        # 生成日期文件夹
        date_folder = datetime.now().strftime('%Y%m%d')
        
        # 生成唯一文件名
        unique_filename = f"{uuid.uuid4().hex[:8]}_{filename}"
        
        # 完整路径
        file_path = f"{folder}/{date_folder}/{unique_filename}"
        
        return file_path
    
    def upload_file(self, file_obj, file_path=None):
        """
        上传文件到COS
        
        Args:
            file_obj: Django上传的文件对象
            file_path: 指定的文件路径（可选，不指定则自动生成）
            
        Returns:
            dict: {
                'success': bool,
                'url': str,  # 文件的完整访问URL
                'path': str,  # 文件在COS中的路径
                'message': str
            }
        """
        try:
            # 如果没有指定路径，自动生成
            if not file_path:
                file_path = self.generate_file_path(file_obj.name)
            
            # 上传文件
            response = self.client.put_object(
                Bucket=self.bucket,
                Body=file_obj.read(),
                Key=file_path,
                EnableMD5=False
            )
            
            # 生成访问URL
            file_url = f"{self.domain}/{file_path}"
            
            return {
                'success': True,
                'url': file_url,
                'path': file_path,
                'message': '上传成功'
            }
            
        except Exception as e:
            return {
                'success': False,
                'url': '',
                'path': '',
                'message': f'上传失败: {str(e)}'
            }
    
    def delete_file(self, file_path):
        """
        删除COS中的文件
        
        Args:
            file_path: 文件在COS中的路径
            
        Returns:
            dict: {'success': bool, 'message': str}
        """
        try:
            self.client.delete_object(
                Bucket=self.bucket,
                Key=file_path
            )
            return {
                'success': True,
                'message': '删除成功'
            }
        except Exception as e:
            return {
                'success': False,
                'message': f'删除失败: {str(e)}'
            }


# 全局COS上传器实例
cos_uploader = COSUploader()
